﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using Persistencia_y_capa_de_negocio;
using System.Collections;


namespace clonegame
{
    public partial class formularioAcceso : Form
    {
        private ArrayList lista;

        private static readonly formularioAcceso instancia = new formularioAcceso();
        private bool salir = false;
        public static formularioAcceso Instancia
        {
            get { return instancia; }

        }

        public formularioAcceso()
        {
            try
            {
                InitializeComponent();
                textBoxUsuario.Text = "Guest";
                textBoxContraseña.Text = "123456";
                lista = CADAdmin.Instancia.getAdmins();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
        }

        public Panel getPanel()
        {
            return panelLogin;
        }
        
        /// <summary>
        /// Comprueba si el login introducido es correcto mirando en la base de datos.
        /// </summary>
        /// <returns></returns>
        private bool ComprobarLogin()
        {
            errorProviderLogin.Clear();
            bool loginCorrecto = true;
            string patron = @"^\w{4}\w*$";
            
            string usuario = textBoxUsuario.Text;
            string contrasena = textBoxContraseña.Text;
            string pwbdd = "";
            if (usuario == "")
            {
                string msjError = "Campo obligatorio";
                errorProviderLogin.SetError(textBoxUsuario, msjError);
                textBoxUsuario.Focus();
                loginCorrecto = false;
            }
            else if (!Regex.Match(usuario, patron).Success)
            {
                string msjError = "Solo puede estar compuesto por 4 o más caracteres.";
                errorProviderLogin.SetError(textBoxUsuario, msjError);
                textBoxUsuario.Focus();
                loginCorrecto = false;
            }
            if (loginCorrecto == true)
            {
                ENAdmin admin = CADAdmin.Instancia.DevolverAdmin(usuario);

                if (admin != null)
                {
                    formularioMaestro.Instancia.UsuarioLogueado = admin;
                    pwbdd = admin.ContrasenaAd;
                    //Esto luego será el resultado de recojer para el usuario X de la base de datos su contraseña en MD5 (32 caracteres)
                    CodMD5 codificar = new CodMD5();


                    if (contrasena == "")
                    {
                        string msjError = "Campo obligatorio";
                        errorProviderLogin.SetError(textBoxContraseña, msjError);
                        textBoxContraseña.Focus();
                        loginCorrecto = false;
                    }
                    else if (!Regex.Match(contrasena, patron).Success)
                    {
                        string msjError = "Solo puede estar compuesto por 4 o más caracteres.";
                        errorProviderLogin.SetError(textBoxContraseña, msjError);
                        textBoxContraseña.Focus();
                        loginCorrecto = false;
                    }
                    else if (!codificar.comprobarMD5(contrasena, pwbdd))
                    {
                        string msjError = "Login Incorrecto.";
                        errorProviderLogin.SetError(textBoxUsuario, msjError);
                        textBoxContraseña.Focus();
                        loginCorrecto = false;
                    }
                }
                else
                {
                    string msjError = "Login Incorrecto.";
                    errorProviderLogin.SetError(textBoxUsuario, msjError);
                    textBoxUsuario.Focus();
                    loginCorrecto = false;
                }
            }

            return loginCorrecto;
        }

        /// <summary>
        /// Evento del botón acceder que nos transportrá a la aplicación principal.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BotonAcceder_Click_1(object sender, EventArgs e)
        {
            try
            {
                if (ComprobarLogin() == true)
                {
                    // Registramos la acción.
                    ENActividad act = new ENActividad();
                    act.Accion = "Login";
                    act.Responsable = formularioMaestro.Instancia.UsuarioLogueado.CuentaAd;
                    act.Descripcion = "Ha accedido a la aplicación.";
                    act.Fecha = DateTime.Now.ToString();

                    CADActividad.Instancia.InsertarActividad(act);

                    // Accedemos al sistema.
                    salir = true;
                    this.Hide();
                    formularioMaestro.Instancia.ShowDialog();
                    Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
        }
        
        private void buttonSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void formularioAcceso_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (salir == false)
            {
                if (MessageBox.Show("¿Desea Salir?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
                {
                    e.Cancel = true;
                }
            }
        }
    }
}
